package com.cn.appcore.utils

import android.net.Uri
import android.util.Base64
import android.util.Log
import com.cn.appcore.ext.loge
import com.cn.appcore.http.constant.HttpConstant
import java.net.URLDecoder
import java.net.URLEncoder
import java.nio.charset.StandardCharsets
import java.security.MessageDigest
import java.util.*

/**
 * 项目：JingShortVideo
 * 包名：com.cxz.kotlin.mvvm.utils
 * 类名：DecryptUtils
 * 创建时间：2022/9/19 10:48
 * 创建人 @author： xiaolin
 * 描述 ：Todo...
 */
object DecryptUtils {
    /** 加密key **/
//    fun encryptionData(enstr: String, key: String = HttpConstant.signConfigKey): String {
//        loge("加密前Json数据：$enstr")
//        var key =HttpConstant.signConfigKey
//        val encodedEnstr = URLEncoder.encode(enstr, StandardCharsets.UTF_8.toString())
//        var retstr = StringBuilder()
//        val strlen = encodedEnstr.length
//        val keylen = key.length
//        for (i in 0 until strlen) {
//            val substr = encodedEnstr[i]
//            val subkey = key[i % keylen]
//            // 在Kotlin中，没有直接的`codeUnitAt`方法，这里使用了`Character.getNumericValue`作为示例，
//            // 但这可能需要根据你的需求进行调整。你可能需要使用`substr.toInt()`或其他方式来获取字符的数值表示。
//            val ret = substr.toInt() xor subkey.toInt()
//            // 如果结果为0，则添加原始字符，否则添加结果字符
//            retstr.append(if (ret == 0) substr else ret.toChar())
//        }
//        // 将结果字符串转换为UTF-8字节，然后进行Base64编码
//        val encodedBytes = retstr.toString().toByteArray(StandardCharsets.UTF_8)
//        val base64Str = Base64.encodeToString(encodedBytes, Base64.NO_WRAP)
//        // 再次对Base64编码后的字符串进行URL编码
////        val encodedResult = URLEncoder.encode(Base64.encodeToString(base64Str.toByteArray(), Base64.NO_WRAP))
//        val encodedResult = URLEncoder.encode(base64Str, StandardCharsets.UTF_8.toString())
//        return encodedResult
////        for (myServiceLoader in serviceLoader) {
////            val json = myServiceLoader.encodeData(URLEncoder.encode(paras))
////            str= URLEncoder.encode(Base64.encodeToString(json.toByteArray(), Base64.NO_WRAP))
////        }
////        return str
//    }
//
//    /**
//     * 解密
//     */
//    fun decryptData(destr: String): String {
//        var key =HttpConstant.signConfigKey
//        var destrDecoded = Uri.decode(destr)
//        val decodedBytes = Base64.decode(destrDecoded, Base64.DEFAULT)
//        val decodedString = String(decodedBytes, StandardCharsets.UTF_8)
//        var retstr = ""
//        var i = 0
//        val strlen = decodedString.length
//        val keylen = key.length
//
//        while (i < strlen) {
//            val substr = decodedString[i].toString()
//            val subkey = key[i % keylen].toString()
//            val ret = substr.codePointAt(0) xor subkey.codePointAt(0)
//            retstr += String(Character.toChars(if (ret == 0) substr.codePointAt(0) else ret))
//            i++
//        }
//        val result = Uri.decode(retstr)
//        return result
//    }
//    /** sign 签名 **/
//    fun setSign(time :String):String{
//        var sign= HttpConstant.APP_TOKEN+"appid="+ HttpConstant.APP_ID+ "timestamp="+time+ HttpConstant.APP_TOKEN
//        var setverSign= Base64.encodeToString(md5(sign).toByteArray(),Base64.NO_WRAP)
//        return encryptionData(setverSign)
//    }
//
//    /** md5加密 */
//    fun md5(content: String): String {
//        val hash = MessageDigest.getInstance("MD5").digest(content.toByteArray())
//        val hex = StringBuilder(hash.size * 2)
//        for (b in hash) {
//            var str = Integer.toHexString(b.toInt())
//            if (b < 0x10) {
//                str = "0$str"
//            }
//            hex.append(str.substring(str.length -2))
//        }
//        return hex.toString()
//    }

}


